import router from '@/router'
import store from '@/store'
// 引入进度条
import NProgress from 'nprogress'
// 引入进度条的样式
import 'nprogress/nprogress.css'
import getPageTitle from '@/utils/get-page-title'

// 开启进度条
// NProgress.start()
// 关闭进度条
// NProgress.done()

// to:要去哪个页面
// from 从哪里来
// next 它是一个函数 如果直接放行next()
// 如果要跳到其他页 next(其他页)
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  document.title = getPageTitle(to.meta.title)
  console.log(to.path, '去哪里')
  console.log(from.path, '从哪里来')
  NProgress.start()
  const token = store.state.user.token
  if (token) {
    if (to.path === '/login') {
      console.log('您已经登录了 不能再去登录页了 跳转到首页')
      next('/') // next 如果制定了地址进行跳转 那么就不会执行router.afterEach
      NProgress.done()
    } else {
      console.log('已经登录不是去登录页 放行')
      // 判断vuex里面是否有数据 如果没有就发送请求 如果有就跳转页面
      if (!store.state.user.userInfo.userId) {
        // 调用actions中的函数  获取用户信息到vuex中
        await store.dispatch('user/getUserInfo')
      }
      next()
    }
  } else {
    // whiteList.includes() 判断传入的内容在不在数组中 返回的是boolean
    if (whiteList.includes(to.path)) {
      console.log('您是白名单 放行')
      next()
    } else {
      console.log('您害没有token 请先登录')
      next('/login')
      NProgress.done()
    }
  }
})

// 如果页面跳转完毕会经过这里
router.afterEach(() => {
  NProgress.done()
})
